// 导航守卫
import router from '@/router'
import store from '@/store'

router.beforeEach(async(to, from, next) => {
  // 有token--去登录页面，强行跳转到首页，去其他页面，放心
  if (store.getters.token) {
    if (to.path === '/login') {
      next('/')
    } else {
      // 在跳转到下一个页面之前判断一下是否需要获取用户信息，如果profile中有的，则直接获取，没有才发送请求
      if (Object.keys(store.state.user.profile).length === 0) {
        console.log('next', next)
        // 当获取完详情之后才跳转页面，保证数据全部返回再执行下面的操作
        await store.dispatch('user/getProfile')
        // 在跳转页面之前,先动态添加路由
        const perms = store.state.user.profile.roles.menus
        const res = await store.dispatch('permission/filterRouter', perms)
        // 设置动态路由
        // 处理刷新变成404，因为刷新页面去其他页面的时候，还没有进入到添加动态路由的步骤，就已经检索到404，就会跳进404页面，所以一定要把404页面放到最后
        router.addRoutes([...res, { path: '*', redirect: '/404', hidden: true }])
        console.log(res)
        // 刷新变成空白页
        // 因为页面在刷新的时候，next还没有路径，不知道具体要去哪个页面。解决方案：强行返回到原本的路径to.path，再触发导航守卫，现在next已经有路径了，可以进行跳转。加return的目的是阻止下面代码执行
        return next(to.path)
      }
      next()
    }
  } else {
  // 没有token--放行白名单，白名单之外的跳转到登录页面
    const whiteList = ['/login', '/404', 'test']
    if (whiteList.indexOf(to.path) !== -1) {
      next()
    } else {
      next('/login')
    }
  }
})
